import os
import shutil

import pytest

from tests.utils.allure import set_report_env_on_results, set_report_execute_on_results


def clean_reports_directory(directory: str):
    """
    清理 Allure 报告目录 (删除所有文件)
    """
    if os.path.exists(directory):
        # Remove all files in the reports directory
        shutil.rmtree(directory)
        os.makedirs(directory)  # Recreate the empty directory
        print(f"清理了目录: {directory}")
    else:
        print(f"目录不存在: {directory}, 无需清理.")


def allure(clean_reports=False):
    """
    使用 allure 报告生成功能运行 pytest 测试
    :param clean_reports: 如果为 True，将清理上次生成的 allure 报告
    """
    # Allure报告目录
    reports_dir = 'reports'

    # If clean_reports is True, clear the existing allure report directory
    if clean_reports:
        clean_reports_directory(reports_dir)

    args = [
        '--alluredir=reports',  # allure 结果目录
        '--allure-epics=二代骑行后台管理接口测试',
    ]
    pytest.main(args)


def copy_environment_and_executor_files():
    """
    pytest 执行后，将环境和执行器文件复制到安全位置。
    """
    # 将 environment.properties 和 executor.json 文件复制到备份文件夹
    shutil.copy('./reports/environment.properties', './backup/environment.properties')
    shutil.copy('./reports/executor.json', './backup/executor.json')


# Main function to execute the entire flow
def main():
    # 使用 allure 运行 pytest 以生成 allure 报告
    allure(True)

    # 在运行测试之前生成环境和执行器文件
    set_report_env_on_results('./reports/environment.properties')
    set_report_execute_on_results('./reports/executor.json')

    # 将生成的环境和执行器文件复制到备份位置
    copy_environment_and_executor_files()


if __name__ == '__main__':
    main()
